Process Creation
![Emir [EF]](https://github.com/emirfateen.png)
Tujuan Praktikum
- Memahami konsep proses
- Memahami pembuatan sebuah proses
- Memahami penggunaan system call fork() dan wait()
- Memahami tipe proses (Parent and Child)
Process
Process adalah instance dari sebuah program yang sedang dieksekusi. Setiap proses memiliki ruang memori, register, stack, dan sumber daya sistem yang terpisah. Proses bersifat independen, artinya setiap proses berjalan dalam ruang memori yang terisolasi dan tidak berbagi memori dengan proses lain. Proses adalah unit eksekusi utama dalam sistem operasi, dan sistem operasi menggunakan mekanisme multiprogramming untuk menjalankan banyak proses secara bersamaan, meskipun hanya ada satu CPU fisik.
Process memiliki ID Process (PID) yang unik, yang digunakan oleh sistem operasi untuk mengidentifikasi dan mengelola process tersebut.
Process Lifecycle
- New
- Ready
- Running
- Waiting
- Terminated
Thread
Thread adalah unit eksekusi yang lebih ringan dan merupakan bagian dari sebuah proses. Thread dalam proses yang sama berbagi ruang memori dan sumber daya, sehingga komunikasi antar thread lebih mudah dan efisien. Thread sering digunakan untuk tugas-tugas yang memerlukan pembagian beban kerja, seperti aplikasi multithreading. Namun, karena thread berbagi memori, kegagalan pada satu thread dapat memengaruhi thread lain dalam proses yang sama.
Thread sering disebut sebagai "lightweight process" karena mereka lebih ringan dibandingkan process dan dapat dibuat serta dihancurkan dengan lebih cepat.
Process Creation
Process creation adalah mekanisme sistem operasi membuat proses baru. Proses adalah instance dari sebuah program yang sedang dieksekusi. Setiap proses memiliki ruang memori, register, stack, dan sumber daya sistem yang terpisah. Proses baru biasanya dibuat oleh proses yang sudah ada (disebut parent process) melalui system call tertentu. Proses baru dapat dibuat karena beberapa alasan, seperti:
- System initialization: Proses yang dijalankan saat sistem operasi mulai berjalan.
- Execution of a process creation system call: Proses yang sedang berjalan dapat membuat proses baru dengan memanggil system call seperti
fork()
di Unix atauCreateProcess
di Windows. - User request: Pengguna dapat meminta pembuatan proses baru, seperti menjalankan aplikasi.
- Initiation of a batch job: Proses yang dijalankan sebagai bagian dari pekerjaan batch.
System call
System call adalah mekanisme yang disediakan oleh sistem operasi untuk memungkinkan proses berinteraksi dengan sistem operasi. Ketika sebuah program membutuhkan layanan dari sistem operasi, program tersebut akan memanggil system call. System call digunakan untuk melakukan tugas-tugas seperti membuat proses baru, mengelola memori, atau berkomunikasi dengan perangkat keras.
Contoh System call
- Process Control: fork(), exec(), wait(), exit()
- File Management: open(), read(), write(), close()
- Device Management: ioctl(), read(), write()
- Information Maintenance: getpid(), time()
- Communication: pipe(), shmget(), msgget()
fork()
Sebelumnya sudah di-mention bawha fork()
adalah system call di Unix/Linux yang termasuk dalam process control. System call fork()
digunakan untuk membuat proses baru (child process) yang merupakan duplikat dari proses yang memanggilnya (parent process). Setelah fork()
dipanggil, kedua proses (parent dan child) akan melanjutkan eksekusi dari titik yang sama, tetapi parent dan child akan memiliki PID (Process ID) yang berbeda.
Karakteristik fork()
:
- Child process adalah copy dari parent process yang berarti menggunakan Program Counter yang sama, register CPU yang sama, dan file terbuka yang sama yang digunakan dalam Parent process.
- Setelah pemanggilan
fork()
, parent dan child process berjalan secara independen. fork()
mengembalikan nilai:- Nol (0) untuk child process
- Nilai positif sebagai PID dari child process untuk parent process.
- Nilai negatif jika gagal.
Contoh Program fork()
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(){
pid_t p = fork();
if(p < 0){
perror("fork fail");
exit(1);
}
printf("Hello world!, process_id(pid) = %d \n",getpid());
return 0;
}
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(){
fork();
fork();
fork();
fork();
printf("hello\n");
return 0;
}
wait()
Selain fork()
, System call yang termasuk dalam process control lainnya adalah wait()
. wait()
adalah system call yang digunakan oleh parent process untuk menunggu child process selesai dieksekusi. Ketika parent process memanggil wait()
, proses tersebut akan di-block sampai salah satu child process-nya selesai.
Karakteristik wait()
:
- Parent process akan menunggu child process untuk terminasi.
- Apabila parent process memiliki banyak child process, parent process akan menunggu salah satu child process untuk terminasi.
wait()
mengembalikan PID dari child process yang telah terminasi.wait()
mengembalikan nilai negatif jika tidak ada child process.
Contoh Program wait()
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
int main() {
pid_t cpid;
if (fork() == 0) {
exit(0); // Terminate child
} else {
cpid = wait(NULL); // Reap parent
}
printf("Parent pid = %d\n", getpid());
printf("Child pid = %d\n", cpid);
return 0;
}